package com.itheima.stock.web;

import com.itheima.stock.pojo.entity.SysUser;
import com.itheima.stock.service.UserService;
import com.itheima.stock.vo.req.LoginReqVo;
import com.itheima.stock.vo.resp.LoginRespVo;
import com.itheima.stock.vo.resp.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author : itheima
 * @date : 2022/9/19 16:18
 * @description : 定义访问用户的服务接口
 */
@RestController //表示这是一个RESTful风格的控制器
@RequestMapping("/api") //表示该控制器处理的请求路径为/api
@Api(value = "用户认证相关接口定义",tags = "用户功能-用户登录功能") //来自于Swagger框架，用于定义接口文档信息。其中，value属性表示接口的名称为"用户认证相关接口定义"，tags属性表示该接口所属的标签为"用户功能-用户登录功能"
public class UserController {
    /**
     * 注入用户服务bean
     */
    @Autowired //将UserService对象自动注入到当前类中
    private UserService userService;
    /**
     * 根据用户名查询用户信息
     * @param userName
     * @return
     */
    @GetMapping("/{userName}") //表示该接口处理GET方法的请求，并且请求路径为"/{userName}"
    @ApiOperation(value = "根据用户名查询用户信息",notes = "用户信息查询",response = SysUser.class) //用于定义接口的属性，包括接口的名称、描述和响应对象。
    @ApiImplicitParam(paramType = "path",name = "userName",value = "用户名",required = true) //用于定义接口方法的参数，包括参数类型、名称、描述和是否必填。
    //根据传入的用户名参数调用userService的方法查询用户信息并返回
    public SysUser getUserByUserName(@PathVariable("userName") String userName){
        return userService.getUserByUserName(userName);
    }
    /**
     * 用户登录功能接口
     * @param vo
     * @return
     */
    @PostMapping("/login")
    @ApiOperation(value = "用户登录功能",notes = "用户登录",response = R.class)
    public R<LoginRespVo> login(@RequestBody LoginReqVo vo){
        return userService.login(vo);
    }
    /**
     * 生成登录校验码的访问接口
     * @return
     */
    @GetMapping("/captcha")
    @ApiOperation(value = "验证码生成功能",response = R.class)
    public R<Map> getCaptchaCode(){
        return userService.getCaptchaCode();
    }
}